import Vue from 'vue'
import store from './store'
import App from './App'
import postParam from 'utils/postParam.js';
import md5 from 'js_sdk/js-md5/src/md5.js';
import base64 from 'js_sdk/js-md5/base64.js';

import Json from './Json' //测试用数据
/**
 *  因工具函数属于公司资产, 所以直接在Vue实例挂载几个常用的函数
 *  所有测试用数据均存放于根目录json.js
 *  
 *  css部分使用了App.vue下的全局样式和iconfont图标，有需要图标库的可以留言。
 *  示例使用了uni.scss下的变量, 除变量外已尽量移除特有语法,可直接替换为其他预处理器使用
 */
const msg = (title, duration = 1500, mask = false, icon = 'none') => {
	//统一提示方便全局修改
	if (Boolean(title) === false) {
		return;
	}
	uni.showToast({
		title,
		duration,
		mask,
		icon
	});
}
const json = type => {
	//模拟异步请求数据
	return new Promise(resolve => {
		setTimeout(() => {
			resolve(Json[type]);
		}, 500)
	})
}

function StringBuilder() {
	this._stringArray = new Array();
}
StringBuilder.prototype.append = function(str) {
	this._stringArray.push(str);
}
StringBuilder.prototype.toString = function(joinGap) {
	return this._stringArray.join(joinGap);
}

/**
 * 网络请求封装
 */
const myPost = (postData) => {
	let url = postParam['port'][postData.url]; //接口键值
	var posttime = new Date().getTime();
	let version = '1.0';
	//请求集合
	let map = {};
	//请求头
	let head = {
		version: version,
		timestamp: posttime + '',
		code: '145158033844'
	};
	//请求体
	let data = postData.data;
	let dataStr = base64.Base64.encode(JSON.stringify(data));
	var sb = version + '' + posttime + "725Y2gu142t0s9tU0C0xaW860z6ZtBj2" + dataStr;
	let token = md5.hex(sb);
	head.token = token;
	map.head = head;
	map.data = dataStr;
	//异步请求数据
	return new Promise((resolve, reject) => {
		uni.request({
			url: url,
			method: postData.method ? postData.method : 'Post',
			data: {
				data: base64.Base64.encode(JSON.stringify(map))
			},
			header: {
				'content-type': postData.contentType ? postData.contentType : 'application/x-www-form-urlencoded'
			},
			dataType: 'json',
			success: function(res) {
				if (res && res.data) {
					let json = res.data;
					if (json && json.head) {
						let jsonHead = json.head;
						let resultData = {
							status: 'fail',
							message: '无参数返回'
						};
						if (json.data) {
							resultData = JSON.parse(base64.Base64.decode(json.data));
						}
						if (jsonHead && jsonHead.code == '00' && postData.success) {
							postData.success(resultData);
						} else {
							if (postData.fail) {
								postData.fail();
							}
						}
					}
				}
			},
			fail: postData.fail ? postData.fail : function(err) {

			},
			complete: (res) => {
				console.log('===========================请求开始============================================');
				console.log('接口：' + url);
				console.log('请求时间：' + posttime);
				console.log('请求参数:', postData.data);
				console.log('回调参数-------res', res)
				let jsonHead = '';
				let resultData = '';
				if (res && res.data) {
					let json = res.data;
					if (json && json.head && json.data) {
						jsonHead = json.head;
						resultData = JSON.parse(base64.Base64.decode(json.data));
					}
				}
				console.log('回调参数:', jsonHead, resultData);
				console.log('===========================请求结束=========================================');
			}
		})
	})
}

/**
 * 加入购物车
 */
const addCartF = (productId, productNum, userCode) => {
	if (productId && productNum && userCode) {
		myPost({
			url: 'addCart',
			data: {
				productId: productId,
				productNum: productNum,
				userCode: userCode
			},
			success(res) {
				msg(res.message);
				//查询购物车数量
				cartProductNum(uni.getStorageSync('userInfo').userCode);
			},
		})
	} else {
		console.log('加入购物车有误', productId, productNum, userCode)
	}
}

/**
 * 操作购物车商品
 * userCode:用户唯一值
 * operateType:0删除商品1增加商品2减少商品
 * cartParamList:{cartId:'购物车id',productNum:'增减数量'}
 */
const operateCartProduct = (userCode, operateType, cartParamList) => {
	if (userCode && operateType && cartParamList) {
		console.log(userCode, operateType, cartParamList)
		myPost({
			url: 'operateCartProduct',
			data: {
				userCode: userCode,
				operateType: operateType,
				cartParamList: cartParamList
			},
			success(res) {
				//查询购物车数量
				cartProductNum(uni.getStorageSync('userInfo').userCode);
			},
		})
	}
}

/**
 * 购物车商品数量
 */
const cartProductNum = (userCode) => {
	var num = 0;
	if (userCode) {
		myPost({
			url: 'cartProductNum',
			data: {
				userCode: userCode
			},
			success(res) {
				if (res.status == 'success' && res.totalSize) {
					uni.setTabBarBadge({
						index: 2,
						text: res.totalSize + ''
					})
				} else {
					uni.removeTabBarBadge({
						index: 2
					})
				}
			},
		})
	}
}
/**
 * 时间戳格式化
 */
const formatDate = (timestamp, format) => {
	var formatTime = '';
	if (timestamp && format) {
		var now = new Date(Number(timestamp)); //创建一个指定的日期对象
		var year = now.getFullYear(); //取得4位数的年份
		var month = now.getMonth() + 1; //取得日期中的月份，其中0表示1月，11表示12月
		var date = now.getDate(); //返回日期月份中的天数（1到31）
		var hour = now.getHours(); //返回日期中的小时数（0到23）
		var minute = now.getMinutes(); //返回日期中的分钟数（0到59）
		var second = now.getSeconds(); //返回日期中的秒数（0到59）
		month = month < 10 ? '0' + month : month;
		date = date < 10 ? '0' + date : date;
		hour = hour < 10 ? '0' + hour : hour;
		minute = minute < 10 ? '0' + minute : minute;
		second = second < 10 ? '0' + second : second;
		if (format == 'yyyy-mm-dd hh:mm:ss') {
			formatTime = year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second;
		}
	}
	return formatTime;
}

const prePage = () => {
	let pages = getCurrentPages();
	let prePage = pages[pages.length - 2];
	// #ifdef H5
	return prePage;
	// #endif
	return prePage.$vm;
}


Vue.config.productionTip = false
Vue.prototype.$fire = new Vue();
Vue.prototype.$store = store;
Vue.prototype.$api = {
	msg,
	json,
	prePage,
	myPost,
	formatDate,
	addCartF,
	operateCartProduct,
	cartProductNum
};

App.mpType = 'app'

const app = new Vue({
	...App
})
app.$mount()
